package com.yz.design.domain;

/**
 * @ClassName Singleton
 * @Description 静态内部类 实现懒汉式单例
 * 静态内部类和非静态内部类一样，都不会因为外部内的加载而加载，同时静态内部类的加载不需要依附外部类，在使用时才加载，不过在加载静态内部类的过程中也会加载外部类
 * @Author 广长
 * @Date 2020/7/17
 * @Version V1.0
 **/
public class Singleton {

    static {
        System.out.println("外部静态代码块执行" + System.currentTimeMillis());
    }

    static class LazyHolder {
        static {
            System.out.println("内部静态代码块执行" + System.currentTimeMillis());
        }

        private static final Singleton instance = new Singleton();
    }

    public Singleton() {
        System.out.println("构造器执行" + System.currentTimeMillis());
    }

    private static Singleton getInstance() {
        System.out.println("外部静态方法执行" + System.currentTimeMillis());
        return LazyHolder.instance;
    }

    public static void main(String[] args) {
        System.out.println(LazyHolder.instance);
    }


}
